# -*- coding: utf-8 -*-
"""
Created on Wed Dec 26 19:02:45 2018

@姓名: 张凡
@学号:2015210834
@班级:能源与动力工程15-1班
@代码上传网址：https://gitee.com/hfutzf/engine_design/blob/master/内燃机设计课程设计相关程序.py

 
 　　　　　　　 ┏┓       ┏┓+ +
 　　　　　　　┏┛┻━━━━━━━┛┻┓ + +
 　　　　　　　┃　　　　　　 ┃
 　　　　　　　┃　　　━　　　┃ ++ + + +
 　　　　　　 █████━█████  ┃+
 　　　　　　　┃　　　　　　 ┃ +
 　　　　　　　┃　　　┻　　　┃
 　　　　　　　┃　　　　　　 ┃ + +
 　　　　　　　┗━━┓　　　 ┏━┛
                  ┃　　  ┃
 　　　　　　　　　┃　　  ┃ + + + +
 　　　　　　　　　┃　　　┃　Code is far away from     bug with the animal protecting
 　　　　　　　　　┃　　　┃ + 　　　　         神兽保佑,代码无bug
 　　　　　　　　　┃　　　┃
 　　　　　　　　　┃　　　┃　　+
 　　　　　　　　　┃　 　 ┗━━━┓ + +
 　　　　　　　　　┃ 　　　　　┣┓
 　　　　　　　　　┃ 　　　　　┏┛
 　　　　　　　　　┗┓┓┏━━━┳┓┏┛ + + + +
 　　　　　　　　　 ┃┫┫　 ┃┫┫
 　　　　　　　　　 ┗┻┛　 ┗┻┛+ + + +
"""
 
"""引入必要的模块
备注：pylab————画图模块
      numpy————矩阵处理和运算模块
      xlrd————读取表格的模块
      xlwt————写入表格的模块"""
import pylab,numpy
import xlrd
import xlwt



"""定义常量"""

P0=101325                 #大气压
D=95*0.001                #气缸直径（m）
Pe=78*1000               #功率（w）
n=2800              #z转速（r/min)
S=115*0.001               #行程（m）
R=S/2.0             #曲轴半径（m）
L=210*0.001               #连杆长度（m）
Lamda=R/L           #栏杆比
L1=150.6*0.001      #质心到小头中心距离（m）
W=2*numpy.pi*n/60   #角速度（单位:rad/s)
####常用质量（单位：kg）#######
M1=1.32             #活塞组质量
M2=1.82             #连杆质量
Mk1=0.54            #连杆轴颈质量
Mk2=-0.109          #平衡质量（包括平衡块）
A=120               #曲柄夹角（单位：°）
Area=numpy.pi*(D*D)/4.0    #活塞顶部面积
Mj=M1+(L-L1)/L*M2            #往复运动质量

"""压力数据读取"""
data=xlrd.open_workbook("气体压力表.xlsx")
table=data.sheets()[0]
pangle= table.col_values(0)[1:]         #读取表格转角数据（单位：°）
pressure= table.col_values(1)[1:]       #读取表格压力数据（单位：bar)

"""角度转换公式"""

def transangle(jiaodu):     #角度转为弧度
    return jiaodu*numpy.pi/180.0
def transradius(radius):     #弧度转为角度
    return radius/numpy.pi*180.0
pi=numpy.pi
def cos(x):
    return numpy.cos(x)
def sin(x):
    return numpy.sin(x)

"""公式"""

angle=numpy.array(pangle)*numpy.pi/180.0  #转角数据（单位：rad)
rangle=numpy.array(pangle)                #转角数据（单位：°)
pressure=numpy.array(pressure)*100000     #压力数据（单位：Pa)

x=R*((1-numpy.cos(angle))+0.5*Lamda*numpy.sin(angle)**2)   #活塞位移公式
v=R*W*(numpy.sin(angle)+Lamda/2.0*numpy.sin(2.0*angle))    #活塞速度公式
a=R*W*W*(numpy.cos(angle)+Lamda*numpy.cos(2*angle))       #活塞加速度公式
Fj=-Mj*a                                       #往复惯性力（单位：N)
Fg=Area*(pressure-P0)                             #气压力（单位：N)
F=Fj+Fg                                        #合成力（单位：N)
beta=numpy.arcsin(Lamda*numpy.sin(angle))        #连杆摆角（单位：rad）
Fn=F*numpy.tan(beta)                           #侧向力（单位：N)
Fl=F/numpy.cos(beta)                           #连杆力（单位：N)
Ft=Fl*numpy.sin((angle+beta))                  #切向力（单位：N)
Fk=Fl*numpy.cos((angle+beta))                  #径向力（单位：N)
Frl=M2*(L1/L)*W*W*R                                   #M2产生的离心力
M=Ft*R                                         #单缸转矩（单位：N·m)
    
'''下面代码块的算法来自《内燃机设计》P37第三段话
由于每缸的转矩都一样，仅和相位有关，故方法如下所示
具体做法：对矩阵进行切分，然后再组装'''
M2=numpy.array(list(M[24:])+list(M[1:25]))
M3=numpy.array(list(M[48:])+list(M[1:49]))
M4=numpy.array(list(M[12:])+list(M[1:13]))
M5=numpy.array(list(M[60:])+list(M[1:61]))
M6=numpy.array(list(M[36:])+list(M[1:37]))
    
'''主轴径所受转矩'''
Mz1=0*M
Mz2=M
Mz3=Mz2+M2
Mz4=Mz3+M3
Mz5=Mz4+M4
Mz6=Mz5+M5
Mz7=Mz6+M6
                 
'''各连杆轴颈所受转矩'''
Mq1=0.5*M
Mq2=Mz2+0.5*M2
Mq3=Mz3+0.5*M3
Mq4=Mz4+0.5*M4
Mq5=Mz5+0.5*M5
Mq6=Mz6+0.5*M6

'''连杆轴颈的负荷'''
Fq=Fl+Frl
Fqx=Frl-Fk
Fqy=Ft
Fq_num=numpy.sqrt(Fqx**2+Fqy**2)
arfa_q=numpy.arctan(abs(Fqy/Fqx))


Fq1x=Fqx
Fq1y=Fqy

'''同上，对矩阵进行切分，再组装'''
Fq2x=numpy.array(list(Fq1x[24:])+list(Fq1x[1:25]))
Fq2y=numpy.array(list(Fq1y[24:])+list(Fq1y[1:25]))
Fq3x=numpy.array(list(Fq1x[48:])+list(Fq1x[1:49]))
Fq3y=numpy.array(list(Fq1y[48:])+list(Fq1y[1:49]))
Fq4x=numpy.array(list(Fq1x[12:])+list(Fq1x[1:13]))
Fq4y=numpy.array(list(Fq1y[12:])+list(Fq1y[1:13]))
Fq5x=numpy.array(list(Fq1x[60:])+list(Fq1x[1:61]))
Fq5y=numpy.array(list(Fq1y[60:])+list(Fq1y[1:61]))
Fq6x=numpy.array(list(Fq1x[36:])+list(Fq1x[1:37]))
Fq6y=numpy.array(list(Fq1y[36:])+list(Fq1y[1:37]))

'''连杆轴承的负荷Fp'''
Fp_num=Fq_num
arfa_p=arfa_q+angle+beta+numpy.pi

'''进行坐标变换，公式参考自《计算机辅助设计》P81 旋转一定角度变换公式'''
Fpx=Fq1x*cos(angle+beta+numpy.pi)-Fq1y*sin(angle+beta+numpy.pi)
Fpy=Fq1x*sin(angle+beta+numpy.pi)+Fq1y*cos(angle+beta+numpy.pi)

'''主轴径上的负荷'''
'''根据《内燃机设计》P37 页曲柄位置图和P42页公式推导得到下面的公式'''
Frk=Mk2*W*W*R
Fz1x=-(0.5*Fq1x+0.5*Frk)
Fz1y=-(0.5*Fq1y)
arfa_z1=numpy.arctan(abs(Fz1y/Fz1x))
Fz1=numpy.sqrt(Fz1x**2+Fz1y**2)
Fz2x=-(0.5*Fq1x+0.5*Frk-0.5*Fq2x*numpy.cos(numpy.pi/3)-0.5*Frk*numpy.cos(numpy.pi/3)+0.5*Fq2y*numpy.cos(numpy.pi/6))
Fz2y=-(0.5*Fq1y-0.5*Fq2x*numpy.cos(numpy.pi/6)-0.5*Frk*numpy.cos(numpy.pi/6)-0.5*Fq2y*numpy.cos(numpy.pi/3))
arfa_z2=numpy.arctan(abs(Fz2y/Fz2x))
Fz2=numpy.sqrt(Fz2x**2+Fz2y**2)     
Fz3x=-(-0.5*Fq2x*numpy.cos(pi/3)-0.5*Frk*cos(pi/3)+0.5*Fq2y*cos(pi/6)-0.5*Fq3x*cos(pi/3)-0.5*Frk*cos(pi/3)-0.5*Fq3y*cos(pi/6))
Fz3y=-(-0.5*Fq2x*cos(pi/6)-0.5*Frk*cos(pi/6)-0.5*Fq2y*cos(pi/3)+0.5*Fq3x*cos(pi/6)+0.5*Frk*cos(pi/6)-0.5*Fq3y*cos(pi/3))
arfa_z3=numpy.arctan(abs(Fz3y/Fz3x))
Fz3=numpy.sqrt(Fz3x**2+Fz3y**2)  
Fz4x=-(-0.5*Fq3x*cos(pi/3)-0.5*Frk*cos(pi/3)-0.5*Fq3y*cos(pi/6)-0.5*Fq4x*cos(pi/3)-0.5*Frk*cos(pi/3)-0.5*Fq4y*cos(pi/6))
Fz4y=-(0.5*Fq3x*cos(pi/6)+0.5*Frk*cos(pi/6)-0.5*Fq3y*cos(pi/3)+0.5*Fq4x*cos(pi/6)+0.5*Frk*cos(pi/6)-0.5*Fq4y*cos(pi/3))
arfa_z4=numpy.arctan(abs(Fz4y/Fz4x))
Fz4=numpy.sqrt(Fz4x**2+Fz4y**2)  
Fz5x=-(-0.5*Fq4x*cos(pi/3)-0.5*Frk*cos(pi/3)-0.5*Fq4y*cos(pi/6)-0.5*Fq5x*cos(pi/3)-0.5*Frk*cos(pi/3)+0.5*Fq5y*cos(pi/6))
Fz5y=-(0.5*Fq4x*cos(pi/6)+0.5*Frk*cos(pi/6)-0.5*Fq4y*cos(pi/3)-0.5*Fq5x*cos(pi/6)-0.5*Frk*cos(pi/6)-0.5*Fq5y*cos(pi/3))
arfa_z5=numpy.arctan(abs(Fz5y/Fz5x))
Fz5=numpy.sqrt(Fz5x**2+Fz5y**2)  
Fz6x=-(-0.5*Fq5x*cos(pi/3)-0.5*Frk*cos(pi/3)+0.5*Fq5y*cos(pi/6)+0.5*Fq6x+0.5*Frk)
Fz6y=-(-0.5*Fq5x*cos(pi/6)-0.5*Frk*cos(pi/6)-0.5*Fq5y*cos(pi/3)+0.5*Fq6y)
arfa_z6=numpy.arctan(abs(Fz6y/Fz6x))
Fz6=numpy.sqrt(Fz6x**2+Fz6y**2)  
Fz7x=-(0.5*Fq6x+0.5*Frk)
Fz7y=-(0.5*Fq6y)
arfa_z7=numpy.arctan(abs(Fz7y/Fz7x))
Fz7=numpy.sqrt(Fz7x**2+Fz7y**2)  

'''主轴承上的负荷'''
'''同上面一样，要进行坐标变换，公式参考自《计算机辅助设计》P81 旋转一定角度变换公式'''
Fc1x=Fz1x*cos(angle+numpy.pi)-Fz1y*sin(angle+numpy.pi)
Fc1y=Fz1x*sin(angle+numpy.pi)+Fz1y*cos(angle+numpy.pi)
Fc1=Fz1
arfa_c1=arfa_z1+angle+pi
Fc2x=Fz2x*cos(angle+numpy.pi)-Fz2y*sin(angle+numpy.pi)
Fc2y=Fz2x*sin(angle+numpy.pi)+Fz2y*cos(angle+numpy.pi)
Fc2=Fz2
arfa_c2=arfa_z2+angle+pi
Fc3x=Fz3x*cos(angle+numpy.pi)-Fz3y*sin(angle+numpy.pi)
Fc3y=Fz3x*sin(angle+numpy.pi)+Fz3y*cos(angle+numpy.pi)
Fc3=Fz3
arfa_c3=arfa_z3+angle+pi
Fc4x=Fz4x*cos(angle+numpy.pi)-Fz4y*sin(angle+numpy.pi)
Fc4y=Fz4x*sin(angle+numpy.pi)+Fz4y*cos(angle+numpy.pi)
Fc4=Fz4
arfa_c4=arfa_z4+angle+pi
Fc5x=Fz5x*cos(angle+numpy.pi)-Fz5y*sin(angle+numpy.pi)
Fc5y=Fz5x*sin(angle+numpy.pi)+Fz5y*cos(angle+numpy.pi)
Fc5=Fz5
arfa_c5=arfa_z5+angle+pi
Fc6x=Fz6x*cos(angle+numpy.pi)-Fz6y*sin(angle+numpy.pi)
Fc6y=Fz6x*sin(angle+numpy.pi)+Fz6y*cos(angle+numpy.pi)
Fc6=Fz6
arfa_c6=arfa_z6+angle+pi
Fc7x=Fz7x*cos(angle+numpy.pi)-Fz7y*sin(angle+numpy.pi)
Fc7y=Fz7x*sin(angle+numpy.pi)+Fz7y*cos(angle+numpy.pi)
Fc7=Fz7
arfa_c7=arfa_z7+angle+pi


      
"""将计算的数据写入表格"""

'''对要生成的表格进行预处理'''
work=xlwt.Workbook()
sheet =work.add_sheet("答案")#建立一个名为 ’答案‘ 的表单
style = xlwt.easyxf('font: bold 1, color red;')
sheet.row(0).height = 256 *3
for j in range(82):
    sheet.col(j).width = 256 *30  #表格列宽均为30
sheet.write(0,0,'曲轴转角（°）',style)#将数据写入表格，下同，不再赘述
sheet.write(0,1,'气压（Pa）',style)
sheet.write(0,2,'位移x（m）',style)
sheet.write(0,3,'速度v（m/s）',style)
sheet.write(0,4,'加速度a（m/s^2）',style)
sheet.write(0,5,'往复惯性力Fj（N）',style)
sheet.write(0,6,'侧向力Fn（N）',style)
sheet.write(0,7,'连杆力Fl（N）',style)
sheet.write(0,8,'径向力Fk（N）',style)
sheet.write(0,9,'切向力Ft（N）',style)
sheet.write(0,10,'单缸转矩M（N·m）',style)
sheet.write(0,11,'第一主轴颈所受转矩Mz1（N·m）',style)
sheet.write(0,12,'第二主轴颈所受转矩Mz2（N·m）',style)
sheet.write(0,13,'第三主轴颈所受转矩Mz3（N·m）',style)
sheet.write(0,14,'第四主轴颈所受转矩Mz4（N·m）',style)
sheet.write(0,15,'第五主轴颈所受转矩Mz5（N·m）',style)
sheet.write(0,16,'第六主轴颈所受转矩Mz6（N·m）',style)
sheet.write(0,17,'第七主轴颈所受转矩Mz7（N·m）',style)
sheet.write(0,18,'第一曲柄销所受转矩Mq1（N·m）',style)
sheet.write(0,19,'第二曲柄销所受转矩Mq2（N·m）',style)
sheet.write(0,20,'第三曲柄销所受转矩Mq3（N·m）',style)
sheet.write(0,21,'第四曲柄销所受转矩Mq4（N·m）',style)
sheet.write(0,22,'第五曲柄销所受转矩Mq5（N·m）',style)
sheet.write(0,23,'第六曲柄销所受转矩Mq6（N·m）',style)
sheet.write(0,24,'连杆轴颈负荷Fq（N）',style)
sheet.write(0,25,'连杆轴承负荷Fp（N）',style)
sheet.write(0,26,'第一主轴颈所受负荷Fz1（N）',style)
sheet.write(0,27,'第一主轴颈所受负荷x方向负荷Fz1x（N）',style)
sheet.write(0,28,'第一主轴颈所受负荷y方向负荷Fz1y（N）',style)
sheet.write(0,29,'第一主轴颈所受负荷方向角arfa_z1（°）',style)
sheet.write(0,30,'第二主轴颈所受负荷Fz2（N）',style)
sheet.write(0,31,'第二主轴颈所受负荷x方向负荷Fz2x（N）',style)
sheet.write(0,32,'第二主轴颈所受负荷y方向负荷Fz2y（N）',style)
sheet.write(0,33,'第二主轴颈所受负荷方向角arfa_z2（°）',style)
sheet.write(0,34,'第三主轴颈所受负荷Fz3（N）',style)
sheet.write(0,35,'第三主轴颈所受负荷x方向负荷Fz3x（N）',style)
sheet.write(0,36,'第三主轴颈所受负荷y方向负荷Fz3y（N）',style)
sheet.write(0,37,'第三主轴颈所受负荷方向角arfa_z3（°）',style)
sheet.write(0,38,'第四主轴颈所受负荷Fz4（N）',style)
sheet.write(0,39,'第四主轴颈所受负荷x方向负荷Fz4x（N）',style)
sheet.write(0,40,'第四主轴颈所受负荷y方向负荷Fz4y（N）',style)
sheet.write(0,41,'第四主轴颈所受负荷方向角arfa_z4（°）',style)
sheet.write(0,42,'第五主轴颈所受负荷Fz5（N）',style)
sheet.write(0,43,'第五主轴颈所受负荷x方向负荷Fz5x（N）',style)
sheet.write(0,44,'第五主轴颈所受负荷y方向负荷Fz5y（N）',style)
sheet.write(0,45,'第五主轴颈所受负荷方向角arfa_z5（°）',style)
sheet.write(0,46,'第六主轴颈所受负荷Fz6（N）',style)
sheet.write(0,47,'第六主轴颈所受负荷x方向负荷Fz6x（N）',style)
sheet.write(0,48,'第六主轴颈所受负荷y方向负荷Fz6y（N）',style)
sheet.write(0,49,'第六主轴颈所受负荷方向角arfa_z6（°）',style)
sheet.write(0,50,'第七主轴颈所受负荷Fz7（N）',style)
sheet.write(0,51,'第七主轴颈所受负荷x方向负荷Fz7x（N）',style)
sheet.write(0,52,'第七主轴颈所受负荷y方向负荷Fz7y（N）',style)
sheet.write(0,53,'第七主轴颈所受负荷方向角arfa_z7（°）',style)

sheet.write(0,54,'第一主轴承所受负荷Fc1（N）',style)
sheet.write(0,55,'第一主轴承所受负荷x方向负荷Fc1x（N）',style)
sheet.write(0,56,'第一主轴承所受负荷y方向负荷Fc1y（N）',style)
sheet.write(0,57,'第一主轴承所受负荷方向角arfa_c1（°）',style)
sheet.write(0,58,'第二主轴承所受负荷Fc2（N）',style)
sheet.write(0,59,'第二主轴承所受负荷x方向负荷Fc2x（N）',style)
sheet.write(0,60,'第二主轴承所受负荷y方向负荷Fc2y（N）',style)
sheet.write(0,61,'第二主轴承所受负荷方向角arfa_c2（°）',style)
sheet.write(0,62,'第三主轴承所受负荷Fc3（N）',style)
sheet.write(0,63,'第三主轴承所受负荷x方向负荷Fc3x（N）',style)
sheet.write(0,64,'第三主轴承所受负荷y方向负荷Fc3y（N）',style)
sheet.write(0,65,'第三主轴承所受负荷方向角arfa_c3（°）',style)
sheet.write(0,66,'第四主轴承所受负荷Fc4（N）',style)
sheet.write(0,67,'第四主轴承所受负荷x方向负荷Fc4x（N）',style)
sheet.write(0,68,'第四主轴承所受负荷y方向负荷Fc4y（N）',style)
sheet.write(0,69,'第四主轴承所受负荷方向角arfa_c4（°）',style)
sheet.write(0,70,'第五主轴承所受负荷Fc5（N）',style)
sheet.write(0,71,'第五主轴承所受负荷x方向负荷Fc5x（N）',style)
sheet.write(0,72,'第五主轴承所受负荷y方向负荷Fc5y（N）',style)
sheet.write(0,73,'第五主轴承所受负荷方向角arfa_c5（°）',style)
sheet.write(0,74,'第六主轴承所受负荷Fc6（N）',style)
sheet.write(0,75,'第六主轴承所受负荷x方向负荷Fc6x（N）',style)
sheet.write(0,76,'第六主轴承所受负荷y方向负荷Fc6y（N）',style)
sheet.write(0,77,'第六主轴承所受负荷方向角arfa_c6（°）',style)
sheet.write(0,78,'第七主轴承所受负荷Fc7（N）',style)
sheet.write(0,79,'第七主轴承所受负荷x方向负荷Fc7x（N）',style)
sheet.write(0,80,'第七主轴承所受负荷y方向负荷Fc7y（N）',style)
sheet.write(0,81,'第七主轴承所受负荷方向角arfa_c7（°）',style)
sheet.write(0,82,'单缸转矩M',style)

'''将数据循环写入表格'''
n=1
dot=4 #小数点后保留位数
for i in range(len(angle)):
    sheet.write(n,0,round(rangle[i],dot))
    sheet.write(n,1,round(pressure[i],dot))
    sheet.write(n,2,round(x[i],dot))
    sheet.write(n,3,round(v[i],dot))
    sheet.write(n,4,round(a[i],dot))
    sheet.write(n,5,round(Fj[i],dot))
    sheet.write(n,6,round(Fn[i],dot))
    sheet.write(n,7,round(Fl[i],dot))
    sheet.write(n,8,round(Fk[i],dot))
    sheet.write(n,9,round(Ft[i],dot))
    sheet.write(n,10,round(M[i],dot))
    sheet.write(n,11,round(Mz1[i],dot))
    sheet.write(n,12,round(Mz2[i],dot))
    sheet.write(n,13,round(Mz3[i],dot))
    sheet.write(n,14,round(Mz4[i],dot))
    sheet.write(n,15,round(Mz5[i],dot))
    sheet.write(n,16,round(Mz6[i],dot))
    sheet.write(n,17,round(Mz7[i],dot))
    sheet.write(n,18,round(Mq1[i],dot))
    sheet.write(n,19,round(Mq2[i],dot))
    sheet.write(n,20,round(Mq3[i],dot))
    sheet.write(n,21,round(Mq4[i],dot))
    sheet.write(n,22,round(Mq5[i],dot))
    sheet.write(n,23,round(Mq6[i],dot))
    sheet.write(n,24,round(Fq_num[i],dot))
    sheet.write(n,25,round(Fp_num[i],dot))
    sheet.write(n,26,round(Fz1[i],dot))
    sheet.write(n,27,round(Fz1x[i],dot))
    sheet.write(n,28,round(Fz1y[i],dot))
    sheet.write(n,29,transradius(round(arfa_z1[i],dot)))
    sheet.write(n,30,round(Fz1[i],dot))
    sheet.write(n,31,round(Fz2x[i],dot))
    sheet.write(n,32,round(Fz2y[i],dot))
    sheet.write(n,33,transradius(round(arfa_z2[i],dot)))
    sheet.write(n,34,round(Fz3[i],dot))
    sheet.write(n,35,round(Fz3x[i],dot))
    sheet.write(n,36,round(Fz3y[i],dot))
    sheet.write(n,37,transradius(round(arfa_z3[i],dot)))
    sheet.write(n,38,round(Fz4[i],dot))
    sheet.write(n,39,round(Fz4x[i],dot))
    sheet.write(n,40,round(Fz4y[i],dot))
    sheet.write(n,41,transradius(round(arfa_z4[i],dot)))
    sheet.write(n,42,round(Fz5[i],dot))
    sheet.write(n,43,round(Fz5x[i],dot))
    sheet.write(n,44,round(Fz5y[i],dot))
    sheet.write(n,45,transradius(round(arfa_z5[i],dot)))
    sheet.write(n,46,round(Fz6[i],dot))
    sheet.write(n,47,round(Fz6x[i],dot))
    sheet.write(n,48,round(Fz6y[i],dot))
    sheet.write(n,49,transradius(round(arfa_z6[i],dot)))
    sheet.write(n,50,round(Fz7[i],dot))
    sheet.write(n,51,round(Fz7x[i],dot))
    sheet.write(n,52,round(Fz7y[i],dot))
    sheet.write(n,53,transradius(round(arfa_z7[i],dot)))
    
    sheet.write(n,54,round(Fc1[i],dot))
    sheet.write(n,55,round(Fc1x[i],dot))
    sheet.write(n,56,round(Fc1y[i],dot))
    sheet.write(n,57,transradius(round(arfa_c1[i],dot)))
    sheet.write(n,58,round(Fc1[i],dot))
    sheet.write(n,59,round(Fc2x[i],dot))
    sheet.write(n,60,round(Fc2y[i],dot))
    sheet.write(n,61,transradius(round(arfa_c2[i],dot)))
    sheet.write(n,62,round(Fc3[i],dot))
    sheet.write(n,63,round(Fc3x[i],dot))
    sheet.write(n,64,round(Fc3y[i],dot))
    sheet.write(n,65,transradius(round(arfa_c3[i],dot)))
    sheet.write(n,66,round(Fc4[i],dot))
    sheet.write(n,67,round(Fc4x[i],dot))
    sheet.write(n,68,round(Fc4y[i],dot))
    sheet.write(n,69,transradius(round(arfa_c4[i],dot)))
    sheet.write(n,70,round(Fc5[i],dot))
    sheet.write(n,71,round(Fc5x[i],dot))
    sheet.write(n,72,round(Fc5y[i],dot))
    sheet.write(n,73,transradius(round(arfa_c5[i],dot)))
    sheet.write(n,74,round(Fc6[i],dot))
    sheet.write(n,75,round(Fc6x[i],dot))
    sheet.write(n,76,round(Fc6y[i],dot))
    sheet.write(n,77,transradius(round(arfa_c6[i],dot)))
    sheet.write(n,78,round(Fc7[i],dot))
    sheet.write(n,79,round(Fc7x[i],dot))
    sheet.write(n,80,round(Fc7y[i],dot))
    sheet.write(n,81,transradius(round(arfa_c7[i],dot)))
    sheet.write(n,82,round(M[i],dot))
    n=n+1

work.save('内燃机设计课程设计计算结果.xls')
"""图表"""

'''定义一个画图函数(对画图相关语句进行封装），直接调用'''
def plot(num,xdata,ydata,title,xlabel,ylabel,grid=True):
    pylab.figure(num)
    pylab.title(title,fontproperties='SimHei',fontsize=20)  #图表的名称
    pylab.xlabel(xlabel,fontproperties='SimHei',fontsize=10) #图表X坐标轴名称
    pylab.ylabel(ylabel,fontproperties='SimHei',fontsize=10)  #图表Y坐标轴名称
    pylab.plot(xdata,ydata,'b-')#画线
    pylab.plot(xdata,ydata,'r.')#标出相关的点
    pylab.text(max(xdata)/2, max(ydata)/2, '张凡—2015210834\n能动15-1班',fontproperties='SimHei',fontsize=35, color='gray', alpha=0.3,horizontalalignment='center',verticalalignment='center')
    pylab.grid(grid)#网格生效
    pylab.rcParams['savefig.dpi'] = 400 #图片像素
    pylab.rcParams['figure.dpi'] = 400
    pylab.savefig('C:\\'+str(title)+'.jpg')  #图片保存位置

plot(1,rangle,x,'位移曲线图','曲轴转角 单位：°','x 单位：m')
plot(2,rangle,v,'速度曲线图','曲轴转角 单位：°','速度v 单位：m/s')
plot(3,rangle,a,'加速度曲线图','曲轴转角 单位：°','加速度a 单位：m/s^2')
plot(4,rangle,Fj,'往复惯性力曲线图','曲轴转角 单位：°','Fj 单位：N')
plot(5,rangle,Fn,'侧向力曲线图','曲轴转角 单位：°','Fn 单位：N')
plot(6,rangle,Fl,'连杆力曲线图','曲轴转角 单位：°','Fl 单位：N')
plot(7,rangle,Fk,'径向力曲线图','曲轴转角 单位：°','Fk 单位：N')
plot(8,rangle,Ft,'切向力曲线图','曲轴转角 单位：°','Ft 单位：N')
plot(9,rangle,Mz1,'第一主轴颈所受力矩曲线图','曲轴转角 单位：°','Mz1 单位：N·m')
plot(10,rangle,Mz2,'第二主轴颈所受力矩曲线图','曲轴转角 单位：°','Mz2 单位：N·m')
plot(11,rangle,Mz3,'第三主轴颈所受力矩曲线图','曲轴转角 单位：°','Mz3 单位：N·m')
plot(12,rangle,Mz4,'第四主轴颈所受力矩曲线图','曲轴转角 单位：°','Mz4 单位：N·m')
plot(13,rangle,Mz5,'第五主轴颈所受力矩曲线图','曲轴转角 单位：°','Mz5 单位：N·m')
plot(14,rangle,Mz6,'第六主轴颈所受力矩曲线图','曲轴转角 单位：°','Mz6 单位：N·m')
plot(15,rangle,Mz7,'第七主轴颈所受力矩曲线图','曲轴转角 单位：°','Mz7 单位：N·m')
plot(16,rangle,Mq1,'第一连杆轴颈所受力矩曲线图','曲轴转角 单位：°','Mq1 单位：N·m')
plot(17,rangle,Mq2,'第二连杆轴颈所受力矩曲线图','曲轴转角 单位：°','Mq2 单位：N·m')
plot(18,rangle,Mq3,'第三连杆轴颈所受力矩曲线图','曲轴转角 单位：°','Mq3 单位：N·m')
plot(19,rangle,Mq4,'第四连杆轴颈所受力矩曲线图','曲轴转角 单位：°','Mq4 单位：N·m')
plot(20,rangle,Mq5,'第五连杆轴颈所受力矩曲线图','曲轴转角 单位：°','Mq5 单位：N·m')
plot(21,rangle,Mq6,'第六连杆轴颈所受力矩曲线图','曲轴转角 单位：°','Mq6 单位：N·m')
plot(22,Fqy,Fqx,'连杆轴颈负荷图','Fqy 单位：N','Fqx 单位：N')
plot(23,Fpy,Fpx,'连杆轴承负荷图','Fpy 单位：N','Fpx 单位：N')
plot(24,Fz1y,Fz1x,'第一主轴颈所受负荷曲线图','Fz1y 单位：N','Fz1x 单位：N')
plot(25,Fz2y,Fz2x,'第二主轴颈所受负荷曲线图','Fz2y 单位：N·','Fz2x 单位：N')
plot(26,Fz3y,Fz3x,'第三主轴颈所受负荷曲线图','Fz3y 单位：N','Fz3x 单位：N')
plot(27,Fz4y,Fz4x,'第四主轴颈所受负荷曲线图','Fz4y 单位：N','Fz4x 单位：N')
plot(28,Fz5y,Fz5x,'第五主轴颈所受负荷曲线图','Fz5y 单位：N','Fz5x 单位：N')
plot(29,Fz6y,Fz6x,'第六主轴颈所受负荷曲线图','Fz6y 单位：N','Fz6x 单位：N')
plot(30,Fz7y,Fz7x,'第七主轴颈所受负荷曲线图','Fz7y 单位：N','Fz7x 单位：N')
plot(31,Fc1y,Fc1x,'第一主轴承所受负荷曲线图','Fc1y 单位：N','Fc1x 单位：N')
plot(32,Fc2y,Fc2x,'第二主轴承所受负荷曲线图','Fc2y 单位：N','Fc2x 单位：N')
plot(33,Fc3y,Fc3x,'第三主轴承所受负荷曲线图','Fc3y单位：N','Fc3x 单位：N')
plot(34,Fc4y,Fc4x,'第四主轴承所受负荷曲线图','Fc4y 单位：N','Fc4x 单位：N')
plot(35,Fc5y,Fc5x,'第五主轴承所受负荷曲线图','Fc5y 单位：N','Fc5x 单位：N')
plot(36,Fc6y,Fc6x,'第六主轴承所受负荷曲线图','Fc6y 单位：N','Fc6x 单位：N')
plot(37,Fc7y,Fc7x,'第七主轴承所受负荷曲线图','Fc7y 单位：N','Fc7x 单位：N')
plot(38,rangle,M,'单缸转矩','曲轴转角 单位：°','M 单位：N·m')